AWS Glue CrawlerでRedshiftをクロールするための設定をしてみた
はじめに
データアナリティクス事業本部のkobayashiです。
AWS Glue Data Catalogを使って様々なデータソースのメタデータ管理を行っている中で、RedshiftをデータソースとしてRedshiftのテーブルをデータカタログに登録する必要がありました。データカタログはGlueのCrawlerを使ってRedshiftをクロールし定期的にメタデータを更新したかったのですが、その際の設定でつまずいた箇所があったのでまとめます。
AWS Glue CrawlerでS3をクロールする内容の記事が弊社ブログにありますのでそちらも御覧ください。
AWS Glue CrawlerでRedshiftをクロールしてみる
AWS Glue Crawlerでクロールできるデータソースは以下になっています。
- ネイティブ対応
- Amazon S3
- Amazon DynamoDB
- JDBC接続で対応
- Amazon Redshift
- Amazon Aurora
- MariaDB
- Microsoft SQL Server
- MySQL
- Oracle
- PostgreSQL
- MongoDB クライアント対応
- MongoDB
今回はRedshiftをクロールするためJDBC接続を以下の手順で進めます。
- AWS Glue Crawlerで使うロールを作成する
- VPCエンドポイント,セキュリティグループの設定をする
- Redshiftへの接続を作成する
- Crawlerを作成する
- Crawlerを実行する
では設定をおこないたいと思います。
なお今回の環境としてはインターネットと遮断したプライベートサブネットのみの環境(NAT ゲートウェイもない)を想定しています。
AWS Glue Crawlerで使うロールを作成する
はじめにCrawlerに付与するロールを作成します。今回は簡易に設定を行っているため厳密なポリシー管理は行っていません。本番環境などではこのまま使用せずに、環境に応じてポリシー設定を変更してください。
手順1)IAM > ロール > ロールを作成
にて適当な名前でIAMロールを作成する
手順2)信頼されたエンティティでGlue
を選択する
手順3)ポリシーにAWSGlueServiceRole、AmazonS3FullAccess
を付与する
より詳細な設定は下記のAWSの公式ドキュメントをご確認ください。
VPC,セキュリティグループの設定を行う
次にVPCにエンドポイントの作成とセキュリティグループの設定を行います。
VPCエンドポイントの作成
AWS Glue Crawlerを使う際にはAWS Glue CrawlerからS3へアクセスする必要がありますが、今回の環境ではNTAのないプライベートサブネットのためS3 VPC ゲートウェイエンドポイントを作成して、このエンドポイント経由でS3へアクセスさせる必要があります。( AWS Glue エラー「VPC S3 エンドポイントの検証に失敗しました」のトラブルシューティングを行います。 )
手順1)VPC > エンドポイント
に進む。
手順2)エンドポイントの作成
を押下してエンドポイントの作成に進む。
手順3)エンドポイントの設定を行い、エンドポイントの作成
を押下してエンドポイントを作成する。
- エンドポイントの設定
- 名前タグ : 適当な名前を入力
- サービスカテゴリ :
AWSのサービス
を選択
- サービス
- タイプ列が
Gateway
のcom.amazonaws.{リージョン名}.s3
を選択する
- タイプ列が
- VPC
- VPCエンドポイントを作成するVPCを選択する
以下の様にエンドポイントが作成されます。
セキュリティグループの設定
AWS Glue CrawlerでRedshiftへ接続するのでそのアクセスを許可する必要があります。これにはRedshiftに付与されているセキュリティグループにすべてのTCPに対する自己参照型のインバウンドルールを設定する必要があります。( JDBC データストアに接続するための VPC の設定 - AWS Glue )
手順1)Amazon Redshift > クラスター
に進む。
手順2)接続するRedshiftクラスターを選択する。
手順3)プロパティタブを押下し、ネットワークとセキュリティの設定
でアタッチしているセキュリティグループを選択する。
手順4)セキュリティグループの設定画面に遷移するので、インバウンドルール
タブを押下しインバウンドのルール編集
を選択する。
手順5)ルールを追加
を押下し、すべてのTCPに対する自己参照型のインバウンドルールを設定する。
- タイプ :
すべてのTCP
を選択 - ソース :
カスタム
を選択し セキュリティグループIDと同じものを入力
今回はRedshiftの設定を行っていますが、接続先がRDSの場合も同様の設定を行います。
Redshiftの接続を作成する
次にCrawlerがRedshiftへ接続するための接続を作成します。
手順1)AWS Glue > データカタログ > データベース > 接続
に進む。
手順2)接続の追加
を押下して接続作成に進む。
手順3)接続のプロパティ
の設定を行い次へ
を押下する。
- 接続名 : 適当な名前を入力
- 接続タイプ :
Amazon Redshift
を選択SSL接続が必要です
をチェック(Redshiftの設定に合わせてください)
手順4)データストアへのアクセス設定
の設定を行い次へ
を押下する。
- クラスター : 接続先のクラスターを選択
- データベース名 : データベース名を入力
- ユーザー名 : ユーザー名を入力
- パスワード : パスワードを入力
手順5)最後に確認画面が出るので問題なければ完了
を押下し接続を作成する。
接続が作成されたら接続のテスト
にて接続確認を行っておきます。問題なければ正常にインスタンスに接続されました
のメッセージが出ます。
Crawlerを作成する
次にAWS Glue Crawlerでクローラを作成します。
手順1)AWS Glue > データカタログ > クローラ
に進む。
手順2)クローラの追加
を押下してクローラ作成に進む。
手順3)クローラに関する情報の追加
の設定を行い次へ
を押下する。
手順4)Specify crawler source type
の設定を行い次へ
を押下する。
手順5)データストアの追加
の設定を行い次へ
を押下する。
- データストアの選択 :
JDBC
を選択 - データストアの選択 : 先に作成したRedshiftの接続を選択
- インクルードパス : クロールしてデータカタログを作成したいデータベースやスキーマを
{データベース名}/{スキーマ名}
で入力
手順6)別のデータストアの追加
で必要なら追加で別のデータストアを追加する。なければそのまま次へ
を押下する。
手順7)IAMロールの選択
で先に作成したIAMロールを選択し次へ
を押下する。
手順8)クローラのスケジュール
の設定を行い次へ
を押下する。
今回はスケジュール実行ではなくオンデマンド実行を選択していますが、1時間単位からの設定やCron形式(最小5分間隔)で指定できます。
手順9)クローラの出力
の設定を行い次へ
を押下する。
- データベース : データカタログを作成したいデータベースのデータカタログを選択
任意項目に関してはすべての新規および既存のパーティションをテーブルからのメタデータで更新します。
にチェックを入れていますが、こちらはお好みで設定をします。
手順10)最後に確認画面が出るので問題なければ完了
を押下し接続を作成する。
以上でクローラが作成できたので最後にクロールを行ってデータカタログを作成します。
Crawlerを実行する
クローラ一覧から作成したクローラを選択し、クロールの実行
を行います。しばらくするとクロールした結果が表示されます。
クローラにより作成されたテーブル情報をAWS Glue > データカタログ > テーブル
にて確認してみるとRedshift上のテーブルのデータが取得できていることが確認できます。
まとめ
AWS Glue Crawlerを使ってプライベート環境にあるRedshiftのテーブル情報からデータカタログを作成してみました。通常のクローラ設定に加え、「Gateway型のS3VPCエンドポイントの作成」、「セキュリティグループに自己参照型のインバウンドルール」を設定する必要があるのでその点注意が必要です。
最後まで読んで頂いてありがとうございました。